次のファイルがあります
Field1|Field2|Field3|Field4|Field5
a|b|c|d|e
1|2|3|4|5
z|y|x|w|v
2つの入力を許可するスクリプトがあります
script.sh Field3 T
script.shは「Field3」パラメータを使用し、その列番号に従って内容を「T」に置き換えます。
[編集する]
@Costasの次の提案を試しましたが、問題が発生しました。私のファイルは次のとおりです。
MODULE_ColumnA~MODULE_ColumnB~MODULE_ColumnC~MODULE_ColumnD~MODULE_ColumnE
8.2~Y~N~~0
次のスクリプトを実行すると
cat <filename> | awk -F'~' -v p='MODULE_ColumnD' -v r='99' 'NR==1{for (i=1;i<=NF;i++) if($i==p)f=i;print;next}$f=r'
値を変更しますが、次のように出力から区切り文字が見つからないか、スペースで置き換えられます。
MODULE_ColumnA~MODULE_ColumnB~MODULE_ColumnC~MODULE_ColumnD~MODULE_ColumnE
8.2 Y N 99 0
レコードから区切り文字を再取得するには?
答え1
awk -F'|' -v p='Field3' -v r='T' '
NR==1{
for (i=1;i<=NF;i++)
if ($i==p)
f=i
print
next}
$f=r
'
使用する形式を指定するには、次のようにscript.awk
保存します。
#!/usr/bin/awk -f
BEGIN{
OFS=FS="|"}
NR==1{
for (i=1;i<=NF;i++)
if ($i==p)
f=i
print
next}
$f=r
そして実行可能にして、次のように使用してくださいchmod +x script.awk
。
./script.awk p=Field4 r=T input.file