0

假设我有一个用冒号分隔的文本文件。我了解如何使用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
4

5 回答 5

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
于 2012-04-07T05:39:01.253 回答
2

您可以简单地打印额外的数据:

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

平原print在它打印的内容中添加了一个换行符。在awk中,字符串连接是通过将字符串(或变量)彼此相邻放置来完成的——不需要逗号或其他运算符。

于 2012-04-07T05:25:07.483 回答
1

你可以在没有 awk 的情况下做到这一点:

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

其中 FILE 是您的数据文件。

于 2012-04-07T10:59:21.933 回答
0

这可能对您有用:

sed 's/^/COUNTRY: /;s/:/\nCAPITOL: /2;s/:/\nTIMEZONE: /3;$!s/$/\n/' file
于 2012-04-07T12:36:09.913 回答
0

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

  cat text | while read line 
  do
      echo $line | awk -F: '{print "COUNTRY: ", $1, "\nCAPITOL: ", $2, "\nTIMEZONE: ", $3, "\n"}'
  done
于 2012-04-08T14:06:18.250 回答