1

我有以下 AWK 脚本(由 Armali 在此站点上提供),它基本上按日期(月/年)剥离制表符分隔的文件并将其保存为 yyyymmm。我现在有另一个附加条件,文件应该被拆分。它应该按月/年以及第 3 列中的唯一值进行拆分。将文件另存为 yyyymmm_Col3Uniquevalue。

当前脚本是

awk "NR>1{split($2,date,\"/\");print>date[3]strftime(\"%%b.txt\",(date[2]-1)*31*24*60*60)}" input.txt 

数据格式:

国家日期类型
香港 31/01/2012 电视台
日本 14/01/2012 出版社
日本 05/01/2012 电视
日本 16/02/2013 出版社
日本 15/02/2013 电视

输出将是 4 个 txt 文件:

2012Jan_Press - 包含记录 2
2012Jan_Television - 包含记录 1,3
2013Feb_Press - 包含记录 4
2013Feb_Television - 包含记录 5
4

2 回答 2

3

试一试以确保您理解它:

$ cat file
Country Date    Type
HongKong    31/01/2012  Television
Japan   14/01/2012  Press
Japan   05/01/2012  Television
Japan   16/02/2013  Press
Japan   15/02/2013  Television

$ cat tst.awk
NR>1 {
   split($2,a,"/")
   secs = mktime(a[3]" "a[2]" "a[1]" 0 0 0")
   mth  = strftime("%b", secs)
   file = a[3] mth "_" $3
   print file
}

$ awk -f tst.awk file
2012Jan_Television
2012Jan_Press
2012Jan_Television
2013Feb_Press
2013Feb_Television

查阅mktime()GNU strftime()awk 手册。

只需更改print fileprint > file您完成测试时。

于 2013-07-29T13:19:34.693 回答
0

使用 TAB 分隔字段...:

awk -F\t "NR>1{split($2,date,\"/\");print>date[3]strftime(\"%%b_\"$3\".txt\",(date[2]-1)*31*24*60*60)}" input.txt

$3必须从引用的格式字符串中排除。

如果日期字段$2在空格之后还包含时间,则按空格和“/”分割以继续获取年份date[3]

awk -F\t "NR>1{split($2,date,\"[/ ]\");print>date[3]strftime(\"%%b_\"$3\".txt\",(date[2]-1)*31*24*60*60)}" input.txt
于 2013-07-29T08:45:48.280 回答