awk 将第 i 行第 p 列中的值替换为下一行同一列中的值

awk 将第 i 行第 p 列中的值替换为下一行同一列中的值
#!/usr/bin/env bash
cat > example_file.txt <<EOL
group, , price
1, value, 3.21
1, 3.42, 4.11
1, 3.5, 1.22
2, 4.1, 9.2
2, 4.2, 2.11
EOL

我想用第二行第二列的值替换此文件第一行第二列的值。因此我希望 awk 返回以下内容:

#!/usr/bin/env bash
cat > example_file.txt <<EOL
group, value, price
1, value, 3.21
1, 3.42, 4.11
1, 3.5, 1.22
2, 4.1, 9.2
2, 4.2, 2.11
EOL

我找不到如何在 awk 中引用下一行:

cat example_file.txt | awk -F, 'BEGIN { OFS = FS } { if (NR==1) $2 = ??}'

答案1

您可以使用getline来获取下一行输入,并split使用当前将其拆分为字段数组FS

$ awk -F, 'BEGIN { OFS = FS } NR==1 && (getline ln) > 0 { split(ln,a); $2 = a[2]} 1' example_file.txt 
group, value, price
1, 3.42, 4.11
1, 3.5, 1.22
2, 4.1, 9.2
2, 4.2, 2.11

如果您还想打印“got”行,ln拆分后它仍然存在(为了获得正确的顺序,我们还需要print首先明确地使用 ,并跳过默认打印next):

$ awk -F, '
    BEGIN { OFS = FS } 
    NR==1 && (getline ln) > 0 { split(ln,a); $2 = a[2]; print; print ln; next} 1
' example_file.txt 
group, value, price
1, value, 3.21
1, 3.42, 4.11
1, 3.5, 1.22
2, 4.1, 9.2
2, 4.2, 2.11

相关内容