次のようなコンテンツを含むCSVファイルがあります。
10;12;33;44;55;66;77;88
1;2;3;4;5;6;7;8
110;112;133;144;155;616;771;818
...etc
各行には、数字で区切られた8つの数字があります;
。
1184 で始まり、下にある各行の先頭に新しいフィールドを追加する必要があるため、最終ファイルは次のようになります。
1184;10;12;33;44;55;66;77;88
1183;1;2;3;4;5;6;7;8
1182;110;112;133;144;155;616;771;818
... etc
awk
macOSで何かを使ってこれを行うにはどうすればよいですか?
ベストアンサー1
awk 'BEGIN { n = 1184 } { printf("%d;%s\n", n--, $0) }' infile >outfile
n
または、コマンドラインで設定するには、次の手順を実行します。
awk -v n=1184 '{ printf("%d;%s\n", n--, $0) }' infile >outfile
またはprint
代わりに使用してくださいprintf
。
awk -v n=1184 '{ print n-- ";" $0 }' infile >outfile
または、awk
新しいフィールドと行の残りの部分の間にフィールド区切り文字を挿入します。
awk -v n=1184 -v OFS=';' '{ print n--, $0 }' infile >outfile
または、最初の;
区切りフィールドのみを変更してレコードを印刷します。
awk -F ';' -v n=1184 -v OFS=';' '{ $1 = n-- OFS $1; print }' infile >outfile
これにより、既存の各行の前に変数に格納されている数字が付き、n
変数も減少します。その行の既存のデータは変更されずに渡されます。
出力が作成され、outfile
質問のサンプルデータが提供されると、次のようになります。
1184;10;12;33;44;55;66;77;88
1183;1;2;3;4;5;6;7;8
1182;110;112;133;144;155;616;771;818
2つのファイル名は異なる必要がinfile
ありますoutfile
。それ以外の場合、入力データファイルは空になり失われます。