最新記事

列の一部に基づいてCSVファイルを分割する
bash
text-processing
awk

列の一部に基づいてCSVファイルを分割する

file.csv次の日付と時刻を含むCSVファイルがあります。 id0,2020-12-12T07:18:26,7f id1,2017-04-28T19:59:00,80 id2,2017-04-28T03:14:35,e4 id3,2020-12-12T23:45:09,ff id4,2020-12-12T09:12:34,a1 id5,2017-04-28T00:31:54,65 id6,2020-12-12T20:13:47,45 id7,2017-04-28T21:04:30,7f 2列の日付に基づいてファイルを分割したいです。上記の例では、次の2つのファイルが生成されます。 file_1.csv id1,2017-04-28T19:59:00,80 id2,2017-04-28T03:14:35,e4 id5,2017-04-28T00:31:54,65 id7,2017-04-28T21:04:30,7f そして file_2.csv id0,2020-12-12T07:18:26,7f id3,2020-12-12T23:45:09,ff id4,2020-12-12T09:12:34,a1 id6,2020-12-12T20:13:47,45 sortこれを試してみましたが、awk日付と時刻に基づいてファイルを8つのファイルに分割します。 sort -k2 -t, file.csv | awk -F, '!($2 in col) {col[$2]=++i} {print > ("file_" i ".csv")}' 日付と時刻ではなく日付のみに基づいてファイルを分割する方法は?

Admin

^m delete sedコマンドの削除、Mデータ
text-processing
sed

^m delete sedコマンドの削除、Mデータ

私はこのコードを使用しています: sed -E ':a;N;;s/(,"[^"]*)\n/\1/;$!ba' $target > Int.csv #sed ':a;N;$!ba;s/\n//g' $target > Int.csv sed -e "s/\r//g" Int.csv > Removejunk.csv \n私の要件は、csvファイルからこの文字を削除し、その^m文字も削除することです。 ただし、出力からM削除されます。 言い換えれば、私は10-01-2020 08:16 AM,ichael Flores 代わりに得る10-01-2020 08:16 AM,Michael Flores

Admin

個人ルールに従ってテキストファイルを編集する
text-processing
files

個人ルールに従ってテキストファイルを編集する

特定のテキストファイルを編集したいです。 dd.mm.yyyy, hh:mm/s-show/... dd.mm.yyyy, hh:mm/s-show/... dd.mm.yyyy,/s-show/... ここで、/s-show/ は各行にあり、その後にランダムな文字「...」が続きます。 2つの状況があります。 1行は「dd.mm.yyyy」形式の日付で始まり、コンマとスペース、「hh:mm」形式の時刻、最後に/ s-show / ...を順番に入力します。 1行は日付だけで始まり、その後にカンマが続き、すぐに/s-show/...が続きます。 各行は次のように編集する必要があります。 最初の場合はhh:mmの後にスペースを3つ入力し(行が日付と時刻で始まる場合)、2番目の場合はカンマの後にスペースを3つ入力し(結果が日付で始まる場合)、同じ文字列を追加します。 /s-show/ 前の https://www.test.com" /s-show/はリンクの一部であり、左側の「https://www.test.com」で補完されなければ有効なリンクになります。 したがって、各行の結果は次のようになります。 dd.mm.yyyy, hh:mm https:/www.test.com/s-show/... dd.mm.yyyy, hh:mm https:/www.test.com/s-show/... dd.mm.yyyy, https:/www.test.com/s-show/... これがどのように可能ですか?追加の利点は、リンクが同じ場所で開始されることです。したがって、最初のケースでは3行、2番目のケースでは9行です。

Admin

sedとawkを使用した後のファイルの最初の2行の損失を防ぐ方法
text-processing
awk
sed

sedとawkを使用した後のファイルの最初の2行の損失を防ぐ方法

次のスクリプトがあります。 file="home/report.csv" while IFS= read -r line do sed 's/\,/;/' > tmp.txt done <"$file" file2="home/tmp.txt" while IFS= read -r line do awk -F. '{print $1";service" > "report_v2.csv"}' OFS=; done <"$file2" 最初の「While」以降のファイル」tmp.txt「最初の行はありません」レポート.csv". その後、2番目の"While"の後にファイルレポート_v2.csv最初の行はありません。tmp.txt。 したがって、最終ファイルは元のファイルよりも2行少なくなります。 私のファイルの例は次のとおりです。 レポート.csv 1,foo 2,pippo 3,pluto 4,davis tmp.txt 2;pippo 3;pluto 4;davis レポート_v2.csv 3;pluto;service 4;davis;service 最後のファイルでも、元のファイルの最初の2行を保持する必要があります。どうですか? ありがとう

Admin

文字列を別のファイルの同じ単語に置き換える
text-processing
sed
replace

文字列を別のファイルの同じ単語に置き換える

ファイルを編集し1.txt、単語を見つけてその単語に置き換えます2.txt。2.txt 私のファイルの順序を維持することに興味があります1.txt。 >title1 ID1 .... rest of string I'm not interested in >title2 ID2 .... rest of string I'm not interested in >title3 ID3 .... rest of string I'm not interested in >title.... しかし、私の情報を追加したいと思います2.txt。 >ID1 text I want to extract >ID2 text I want to extract >ID3 text I want to extract >IDs.... 最後に、次の構造の新しいファイルを作成したいと思います。 >title1 ID1 .... text I want >title2 ID2 .... text I want >title3 ID3 .... text I want >title.... 私は複数のsedコマンドを試しましたが、ほとんどは両方のファイルのID#を完全に置き換えません。 Bashで処理できることを願っています。 ご協力ありがとうございます 試行に失敗しました。私のコードは、ファイル1 = cog_anotations.txt、ファイル2 = Real.cog.txt ID = COG05764、COG 015668などです。 sed -e '/COG/{r Real.cog.txt' -e 'd}' cog_anotations.txt sed "s/^.*COG.*$/$(cat Real.cog.txt)/" cog_anotations.txt sed -e '/\$COG\$/{r Real.cog.txt' -e 'd}' cog_anotations.txt grep -F -f cog_anotations.txt Real.cog.txt > newfile.txt grep -F -f Real.cog.txt cog_anotations.txt > newfile.txt 実線ファイル1 >Bravo_5 >CDD:223731 COG0658, ComEC, Predicted membrane metalbinding protein l >Bravo_6 >CDD:223242 COG0164, RnhB, Ribonuclease HII [DNA replication, >Bravo_7 >CDD:223778 COG0706, YidC, Preprotein translocase subunit YidC . 実線ファイル2 COG0006 E Xaa-Pro aminopeptidase COG0706 J Glutamyl- or glutaminyl-tRNA synthetase COG0164 J tRNA A37 threonylcarbamoyladenosine synthetase subunit COG0012 J Ribosome-binding ATPase YchF, GTP1/OBG family COG0013 J Alanyl-tRNA synthetase

Admin

複数の行を持つテーブルの行の各値に、同じ定義値を掛けます。
text-processing
awk
sed

複数の行を持つテーブルの行の各値に、同じ定義値を掛けます。

タブで区切られたテーブルがあります(表1)。 a b c A 0.5 0.2 0 B 0 0.5 0.4 C 1 0.3 0.4 D 0.2 0 0.2 タブ区切りファイル(File1) A 0.3 B 1 C 0.5 D 0.5 Table1の各行(たとえば、行A(0.5 0.2および0))の各数字と、File1の同じ行(行A(0.3))の数字を掛けたいと思います。したがって、行Aの場合、0.5 * 0.3、0.2 * 0.3、および0 * 0.3になります。 希望の出力: a b c A 0.15 0.06 0 B 0 0.5 0.4 C 0.5 0.15 0.2 D 0.1 0 0.1 これを明確にするために、以下はサンプルテーブルです。この文字は列/行名を表す変数です。何百もの列と行があるかもしれません。実際の列/行名には数字を含めることができ、スクリプトはこれらの数字を変更しないでください。例えば、行「A」の名前は「ABC123」であってもよい。 助けてくれてありがとう。

Admin

awk / sedを使用して特定の列の内容を抽出する
shell-script
text-processing
awk
sed
grep

awk / sedを使用して特定の列の内容を抽出する

閉鎖。この質問はもう少し尋ねる必要があります集中。現時点では回答は許可されていません。 この質問を改善したいですか?1つの問題にのみ焦点を当てるように質問を更新してください。この記事を編集してください。 閉鎖3年前。 この問題を改善する 提供される文書: $ cat CronConfig `FILE SYSTEM` `------------` warningThreshold: 77 criticalThreshold: 99 `MEMORY` `-------` warningThreshold: 66 criticalThreshold: 88 `CPU` `----` intervalCount: 6 intervalSecs: 7 warningThreshold: 99 criticalThreshold: 88 CronConfig上記の内容を含むファイルがあります。私は値を使用し、warningThreshold次のような出力が必要です。MEMORYcriticalThresholdCPU 66 88 この値を取得するには、コマンドを使用します。 (しかし、正しい方法でやっているかどうかはわかりません。) awk 'BEGIN{FS="\n"; RS="------------"} {print $7}' CronConfig | awk 'NF {print $2}' awk 'BEGIN{FS="\n"; RS="------------"} {print $15}' CronConfig | awk 'NF {print $2}'

Admin

一致するものがある場合、awkは2行を印刷します。
text-processing
awk
nawk

一致するものがある場合、awkは2行を印刷します。

私の出力のいくつかは次のとおりです。 Gathering data for drive 1 ... Drive name: id1,sd@n5000cca17096 Drive Model: HUH721010AL4204 Drive Speed: 7200 RPMs Drive Temp: 41 C Gathering data for drive 2 ... Drive name: id1,sd@n5000cca24156 Drive Model: HUH721010AL4204 Drive Speed: 7200 RPMs Drive Temp: 41 C Gathering data for drive 3 ... Drive name: id1,sd@n5000cca8749 Drive Model: HUH721010AL4204 failed to get drive stats Gathering data for drive 4 ... Drive name: id1,sd@n5000cca19183 Drive Model: HUH721010AL4204 Drive Speed: 7200 RPMs Drive Temp: 41 C Gathering data for drive 5 ... Drive name: id1,sd@n5000cca4607 Drive Model: HUSMH8010BSS204 failed to get drive stats Gathering data for drive 6 ... Drive name: id1,sd@n5000cca10152 Drive Model: HUH721010AL4204 Drive Speed: 7200 RPMs Drive Temp: 41 C ドライブ統計を返すことができない(したがって一致する)すべてのドライブの「ドライブ名」を印刷したいと思いますfailed to get drive stats。 前の行を取得する方法を知っています。 awk '$0=="failed to get drive stats" && $2>1 {print f} {f=$0}' しかし、これは私には役に立ちません。 希望の出力: Drive name: id1,sd@n5000cca8749 Drive name: id1,sd@n5000cca4607 編集する: 何らかの理由で出力がリダイレクトされると、端末と同じ方法で表示されません。私が実行した場合: command >out.txt 2>&1 出力ファイルは次のとおりです。 failed to get drive stats failed to get drive stats Gathering data for drive 1 ... Drive name: id1,sd@n5000cca17096 Drive Model: HUH721010AL4204 Drive Speed: 7200 RPMs Drive Temp: 41 C Gathering data for drive 2 ... Drive name: id1,sd@n5000cca24156 Drive Model: HUH721010AL4204 Drive Speed: 7200 RPMs Drive Temp: 41 C .... どちらのawk回答も仕事を提供しましたが、他に質問があるようです。

Admin

列のn個の値と全体の平均を計算する方法は?
linux
text-processing
text-formatting
checksum
load-average

列のn個の値と全体の平均を計算する方法は?

私はLinuxにとって比較的初心者なので、助けてくれて本当にありがとう。を使用していますが、grep抽出されたすべての値(どの列に関係なく)の平均と、各ファイルから抽出された値(n)の数(各列に入力)も必要です。 注文する: grep -o "201[1-4].[0-9][ -9]" file1.txt file2.txt file3.txt \ | awk -F: ' { if (!s[$1]){ s[$1]=$2 } else { s[$1]=s[$1]","$2 } } END { for (f in s){ print f","s[f] } }' | csvtool transpose -u " " - | column -nt 現在の出力: file1.txt file3.txt file2.txt 2013.17 2012.69 2013.54 2012.6 2013.44 2013.9 2013.12 2012.64 2013.66 2012.76 2013.11 2013.44 2013.75 2012.6 2013.89 2013.08 2012.41 2013.62 2012.41 2013.41 2013.2 常に3つの列がありますが、行数は予測できません。 例: file1.txt file3.txt file2.txt 1 2 3 2 1 1 2 n=2 n=2 n=3 Average: 1.714 私が使用するものの例: ファイル1: 2896.79 2897.65 2898.82 2012.69 2013.44 2897.4 2896.79 2012.64 2896.71 2217.4 2013.11 2012.6 2012.41 2012.41 2013.2 2897.12 2896.61 2896.35 2896.85 2896.26 2896.72 2913.91 2914.41 2914.27 2329.68 2329.71 2914.15 2914.32 2321.19 2914.02 2329.32 2896.49 2025.55 2328.84 2328.98 2329.1 2913.96 2913.48 2913.36 2913.97 2913.46 2913.71 2925.09 2925.58 2926.69 2401.39 2897.65 2925.77 2925.55 2328.96 2924.86 2897.19 2913.95 2029.61 2896.86 2896.93 2764.59 2925.18 2924.96 2924.68 2925.03 2924.18 2924.72 2933.54 2933.91 3196.19 2897.73 2914.79 3314.12 3016.04 2400.29 3015.62 2914.03 2925.09 2897.07 2913.69 2914.41 2897.38 2934.31 3058.51 3015.26 2934.32 2932.55 2933.38 2952.71 2953.49 3223.9 2914.91 2926.03 3321.3 3066.1 2896.71 3065.91 2925.14 2934.16 2914.04 2924.74 2925.54 2914.6 2952.92 3065.18 3065.74 2953.23 3072.91 2952.84 3016.02 3016.4 3249.51 2925.73 2932.82 3373.04 3073.91 2913.87 3073.65 2953.29 2952.94 2925.78 2952.15 2933.65 2925.67 3015.76 3073.21 3072.94 3065.81 3222.86 3015.45 3065.42 3059.27 3313.84 2953.72 2953.17 3444.15 3081.47 2925.02 3192.84 3015.73 3015.47 2953.12 3015.35 2953.29 2953.84 3073.71 3223.42 3080.34 3073.98 3312.09 3059.03 ファイル2: 2013.17 2012.6 2013.12 2036.82 2037.29 2036.53 2036.44 2032.6 2032.88 2012.76 2037.57 2037.26 2037.5 2042.89 2038.1 2013.75 2037.73 2038 2037.93 2033.5 2033.26 2013.08 2033.07 2033.03 2032.99 2042.08 2042.15 2042.14 2041.82 2036.84 2036.88 2033.27 2042.66 2042.65 2042.61 2461.68 2042.94 2037.45 2042.99 2042.96 2043.04 2037.29 2037.32 2033.44 2037.25 2037.27 2037.26 2080.15 2080.48 2080.35 2079.99 2042.18 2042.22 2037.31 2461.16 2080.81 2080.72 2465.94 2461.39 2043 2081.13 2081.08 2081.26 2042.62 2042.63 2037.55 2042.56 2042.49 2042.41 2464.77 2465.3 2465.08 2460.36 2053.03 2465.1 2042.58 2465.84 2461.76 2460.66 2473.93 2466.23 2461.58 2461.48 2461.6 2466.06 2053.48 2053.35 2042.68 2053.26 2053.42 2053.79 2480.18 2473.43 2472.84 2464.91 2080.37 2480.47 2058.27 2473.22 2465.78 2465.78 2482.02 2474.04 2466.07 2466.05 2466.01 2474.01 2080.88 2080.75 2053.24 2076.01 2059.33 2058.08 2500.19 2481.17 2480.7 2472.76 2460.1 2529.24 2076.3 2481.38 2473.76 2473.51 2501.38 2482.1 2473.97 2474.02 2473.99 2482.05 2276.73 2276.52 2058.42 2080.83 2075.97 2075.97 2529.14 2529.55 2529.28 2481.04 2465.12 2537.59 2080.44 2489.75 2481.63 2481.37 2525.17 2490.26 2482.1 2481.98 2481.96 2501.93 2465.52 2465.58 2076.22 2250.64 2080.54 2080.49 2537.07 2536.95 2537.65 2487.59 2473 2619.65 2276.27 2496.5 2500.38 2489.45 2530.2 2502.23 2525.03 2490.46 2501.06 2530.44 2500.93 2481.26 2080.85 2276.67 2118.71 2275.92 2635.42 2547.03 2544.73 2503.45 2480.94 2636.12 2465.35 2500.25 2524.95 2524.14 2538.07 2524.69 2530.47 2530.45 2524.9 2538.6 2529.88 2500.92 2276.34 ファイル3: 2207.2 2003.43 6628.01 2013.54 2013.9 2914.93 2003.72 3315.09 2013.66 2013.44 2147.76 2147.67 2207.45 2147.93 2013.89 2013.62 2008.56 2914.99 6632.04 2252.13 2036.51 2147.79 2036.93 2926.08 2013.41 5833.85 2037.51 2037.41 2206.79 2207.16 2898.47 2207.22 2037.11 2147.77 2037.9 3060 2639.52 2120.66 2206.81 2147.77 3016.02 2036.57 6630.91 2147.94 2147.93 2914.59 2914.66 2915.5 2898.31 2207.46 2206.73 2147.96 3225.13 2829.69 2147.96 2329.47 2207.1 3059.21 2147.81 2207.22 2207.15 3015.96 3058.98 2926.66 2915.11 2898.69 2329.31 2166.65 3314.22 2914.74 2206.87 2897.84 2252.53 3225 2329.91 2329.35 2329.69 3031.21 3224.88 3059.82 2926.17 2915.3 2897.89 2207.42 5833.23 3015.61 2252.38 2914.72 2329.72 3265.74 2897.86 2897.85 2897.81 3058.98 3265.62 3225.63 3059.46 2926.66 2914.67 2253.44 6034.36 3030.72 2329.24 2925.98 2897.89 3305.35 2914.99 2915 2914.72 3077.57 3305.36 3266.57 3225.4 3016.03 2925.65 2330.06 6121.01

Admin

最初のフィールドに基づいてファイル行を分割する
linux
text-processing
awk
sed

最初のフィールドに基づいてファイル行を分割する

私のファイルの内容は以下のようになり、私の出力を以下のように変換したいと思います。 入力する 1,a,b,c 2,b,c 3,e,f 4,l 希望の出力 1,a 1,b 1,c 2,b 2,c 3,e 3,f 4,l 最初のフィールドの値は一意であり、入力の最初のフィールドに重複した行はありません。 私はスクリプトに初めてアクセスし、これをどのように実行できるかわかりません。

Admin

特定の「検索」基準に一致するすべてのファイルの最初の行をどのように印刷できますか?
shell-script
text-processing
find

特定の「検索」基準に一致するすべてのファイルの最初の行をどのように印刷できますか?

.txt100バイトより長いすべてのファイルの最初の行を印刷したいです。これまでの基準を満たすファイルを収集しましたが、ファイルの最初のテキスト行を印刷する方法がわかりません。 find -size +100c -name "*.txt" それとも私が完全に間違った道を行っているのでしょうか?

Admin