hashdeepの出力ファイルの次のフラグメントが提供されます。
7241,11111111111111111111111111111111,\01-data\file1
1237241,22222222222222222222222222222222,\01-data\file2
41,33333333333333333333333333333333,\01-data\file3
次のようにフォーマットするにはどうすればよいですか?
7241,11111111111111111111111111111111,\01-data\file1
1237241,22222222222222222222222222222222,\01-data\file2
41,33333333333333333333333333333333,\01-data\file3
sedを使いたいのですが(これが私が慣れ始めたので)、特定の列に現れる文字だけを変更するようにsedに指示する方法はありますか?
もちろん、他の方法があれば喜んでお知らせします。
-j0
その理由は、hashdeepで(シングルスレッド)オプションを使用せずに2つの出力ファイルを比較できるように、ファイル名の出力をソートしたいからです。
答え1
そしてawk
:
awk -v l="$(wc -L <file)" '{printf "%"l"s\n", $0}' file
-v
awk
変数に外部値を割り当てますl
。wc -L <file
ファイル内の最長行の長さを探します。
printf "%"l"s\n", $0
各行を印刷して空白で埋めますl
。 10個のスペースの場合、次のようになりますprintf "%10s\n", $0
。
出力:
7241,11111111111111111111111111111111,\01-data\file1
1237241,22222222222222222222222222222222,\01-data\file2
41,33333333333333333333333333333333,\01-data\file3
答え2
sed -e:, -e's/^[^,]\{0,6\},/ &/;t,'
行の先頭に7つ以上のカンマ以外の文字があるまで少し繰り返します。ただし、コンマの後にカンマ以外の文字がすでに7文字未満の場合、何もしません。したがって、空白行やコンマと一致しない行、またはカンマと一致するがすでにカンマではない7行以上で始まる行には影響しません。
ループも非常に安価です。自動デバイスは、コンマまたはカンマではなく、2種類の文字のみを考慮するだけで、指定された時間に最大7つを考慮します。
7241,11111111111111111111111111111111,\01-data\file1
1237241,22222222222222222222222222222222,\01-data\file2
41,33333333333333333333333333333333,\01-data\file3
答え3
廃止予定のsed
入力内容をコピーしてLibreoffice Calcに貼り付け、選択して貼り付けで「カンマ区切り」オプションを選択し、以下のように各データ型を別々の列に入力しました。
私の考えは非常に簡単な解決策です。
7241 11111111111111100000000000000000 \01-data\file1
1237241 22222222222222200000000000000000 \01-data\file2
41 33333333333333300000000000000000 \01-data\file3
答え4
質問はよくわかりませんでしたが、ファイル名でソートしたいと思いますか?その場合は、以下を使用してくださいsort
。
sort -t , -k 3 my_file.txt