다음 파일이 있습니다
Field1|Field2|Field3|Field4|Field5
a|b|c|d|e
1|2|3|4|5
z|y|x|w|v
두 개의 입력을 허용하는 스크립트가 있습니다
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