ファイルのテキストを順番に変更したいと思います。
ファイルの内容は次のとおりです。
1,01-JUN-2016,ABC
2,01-JUN-2016,ABC
3,01-JUN-2016,ABC
4,01-JUN-2016,ABC
5,01-JUN-2016,ABC
6,02-JUN-2016,ABC
7,02-JUN-2016,ABC
8,02-JUN-2016,ABC
9,02-JUN-2016,ABC
10,02-JUN-2016,ABC
11,02-JUN-2016,ABC
12,02-JUN-2016,ABC
13,02-JUN-2016,ABC
14,02-JUN-2016,ABC
次のように修正したいと思います。
1,01-JUN-2016,ABC1
2,01-JUN-2016,ABC2
3,01-JUN-2016,ABC3
4,01-JUN-2016,ABC4
5,01-JUN-2016,ABC5
6,02-JUN-2016,ABC6
7,02-JUN-2016,ABC7
8,02-JUN-2016,ABC1
9,02-JUN-2016,ABC2
10,02-JUN-2016,ABC3
11,02-JUN-2016,ABC4
12,02-JUN-2016,ABC5
13,02-JUN-2016,ABC6
14,02-JUN-2016,ABC7
答え1
awkを使う
awk '$0=$0 (NR-1)%7+1' file
または
awk '{print (NR-1)%7+1}' file
デフォルトでは、1を引くことは数字0から始まります。
Modulo 7 は 7 行目ごとに繰り返されます。
さらに、7 mod 7は0なので、私たちが始めたいのではないので、1から始めたいので+1します。
答え2
$ awk -F, 'FNR < 8 { print $0$1 }; FNR > 7 {print $0($1-7)}' arvind.txt
1,01-JUN-2016,ABC1
2,01-JUN-2016,ABC2
3,01-JUN-2016,ABC3
4,01-JUN-2016,ABC4
5,01-JUN-2016,ABC5
6,02-JUN-2016,ABC6
7,02-JUN-2016,ABC7
8,02-JUN-2016,ABC1
9,02-JUN-2016,ABC2
10,02-JUN-2016,ABC3
11,02-JUN-2016,ABC4
12,02-JUN-2016,ABC5
13,02-JUN-2016,ABC6
14,02-JUN-2016,ABC7
行番号が8より小さい場合は、行全体を印刷してから最初のフィールドを印刷します。行番号が7より大きい場合は、行全体を印刷してから最初のフィールドから7を引いた値を印刷します。
ちなみに、現在の入力ファイルでこれまでに見た FNR
入力レコードの数です。組み込み変数です。持っているawk
FNR
awk
何もない(偶然を超えて)入力ファイルの最初のフィールド値に関連しています。
ただし、複数の入力ファイルを使用してこのコマンドを実行し、各ファイルの個々の行数ではなく、すべての入力ファイルの累積行数が必要な場合は、代わりにNR
使用してくださいFNR
。
答え3
この試み:
awk -F, '$1 <=7 { print $0$1 }; $1 > 7 {print $0($1-7)}' filename