列の1つに不明な値があり、その列の値を同じ行の一部の列の値に置き換える必要がある固定幅ファイルの列の値を置き換える必要があります。
A B C D E F G H I J K L M N
ex: 123908 456567 675674 0000000x 45678 09756 125678 45678 09756 125678 45678 09756 125678 45678 09756
ここでは、0000000x
(D列)を(G列)に置き換える必要があります125678
。
私は試した:
awk 'BEGIN{FS=OFS=""}{f=0;for(i=292;i<=300;i++){if($i!~/0000000X/){f=1}};if(f) {for(i=292;i<=300;i++){$i=2}};print }'
このコマンドは、すべての行の対応する列を変更します。ただし、0000000x
その値を持つ特定の列を変更する必要があります。
答え1
次の入力が与えられた場合:
$ cat file
a X c D e X f
a B c D e X f
これをやろうとしているようです。
$ awk '$2=="X"{$2=$4} 1' file
a D c D e X f
a B c D e X f
またはこれ:
$ awk '{for (i=1;i<=NF;i++) if ($i=="X") $i=$4} 1' file
a D c D e D f
a B c D e D f
両方でない場合は、質問を編集して必要な内容を明確にし、より現実的な代表的な例を提供してください。