awk заменяют значение в colunm p строка i значением в том же столбце следующая строка

#!/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

Я хочу заменить значение в 1 строке, 2-м столбце этого файла значением в 2-й строке 2-й столбец. Таким образом, я надеюсь иметь возврат 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 = ??}'
0
задан 14 January 2019 в 20:19

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

Если Вы хотите распечатать "полученную" строку также, это находится все еще в 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
1
ответ дан 26 October 2019 в 13:11

Другие вопросы по тегам:

Похожие вопросы: