如何从文件中获取awk输入并将我自己的文本添加到数据中?

时间:2012-04-07 05:22:36

标签: shell scripting awk

假设我有一个用冒号分隔的文本文件。我了解如何使用awk显示整个文本文件或任何特定列。但是,我想要做的是获取awk输出,然后通过使用shell脚本添加我自己的文本来显示它?例如,假设我的文本文件是:

England:London:GMT
USA:Washington:EST
France:Paris:GMT

我想要做的是将此输入显示为以下格式:

COUNTRY: England
CAPITOL: London
TIMEZONE: GMT

COUNTRY: USA
CAPITOL: Washington
TIMEZONE: EST

COUNTRY: France
CAPITOL: Paris
TIMEZONE: GMT

5 个答案:

答案 0 :(得分:3)

您可以使用以下awk命令:

awk -F: '{printf "COUNTRY: %s\nCAPITOL: %s\nTIMEZONE: %s\n\n",$1,$2,$3}'

根据以下成绩单:

pax> echo 'England:London:GMT
...> USA:Washington:EST
...> France:Paris:GMT' |awk -F: '
...>     {printf "COUNTRY: %s\nCAPITOL: %s\nTIMEZONE: %s\n\n",$1,$2,$3}'
COUNTRY: England
CAPITOL: London
TIMEZONE: GMT

COUNTRY: USA
CAPITOL: Washington
TIMEZONE: EST

COUNTRY: France
CAPITOL: Paris
TIMEZONE: GMT

答案 1 :(得分:2)

您只需打印额外数据:

awk -F: '{ print "COUNTRY: " $1;
           print "CAPITOL: " $2;
           print "TIMEZONE: " $3;
           print "";
         }' text_file

普通print为其打印的内容添加换行符。在awk中,通过将字符串(或变量)放在彼此相邻的位置来完成字符串连接 - 不需要逗号或其他运算符。

答案 2 :(得分:1)

你可以不用awk来做到这一点:

<FILE  tr : '\n' | 
    xargs printf "COUNTRY: %s\nCAPITOL: %s\nTIMEZONE: %s\n\n" 

其中FILE是您的数据文件。

答案 3 :(得分:0)

这可能对您有用:

sed 's/^/COUNTRY: /;s/:/\nCAPITOL: /2;s/:/\nTIMEZONE: /3;$!s/$/\n/' file

答案 4 :(得分:0)

你可以在shell中使用awk而阻止代码:

  cat text | while read line 
  do
      echo $line | awk -F: '{print "COUNTRY: ", $1, "\nCAPITOL: ", $2, "\nTIMEZONE: ", $3, "\n"}'
  done