Почему этот awk-скрипт тоже печатает оригинальный файл? - PullRequest
1 голос
/ 28 марта 2019

У меня есть следующий скрипт:

ascript2.awk

#!/usr/bin/awk -f
BEGIN {FS=":"} 
a[$1]=a[$1] ";" $2 " : " $3
END{
for (x in a) print x,a[x]}        

Когда я его запускаю, он печатает также оригинальный файл intput.Зачем?Когда я создаю такой скрипт, он работает нормально:

слияние

#!/bin/bash
awk -F' *: *' '{a[$1]=a[$1] (a[$1]?" \\ " :" ; ") $2 ":" $3} END {for (x in a) print x,a[x]}' $1

Ввод:

Affe : 3 : test
Affe : 5 : test2
Money : 9 : test3

Выходы:

$ ./merge t.txt
Money  ; 9:test3
Affe  ; 3:test \ 5:test2

$ ./ascript2.awk t.txt
Affe : 3 : test
Affe : 5 : test2
Money : 9 : test3
Money  ; 9  :  test3
Affe  ; 3  :  test; 5  :  test2

1 Ответ

4 голосов
/ 28 марта 2019

В ascript2.awk, a[$1]=a[$1] ";" $2 " : " $3 должны быть заключены в фигурные скобки, в противном случае оно будет интерпретироваться как условие без действия, , и любое условие без действия будет печатать строку, если выполняется только условие . (См .: что означает 1 в конце сценария awk )

Итак, ваш скрипт должен выглядеть так:

#!/usr/bin/awk -f
BEGIN { FS=":" } 
{ a[$1] = a[$1] ";" $2 " : " $3 }
END { for (x in a) print x, a[x] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...