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