Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 打印特定列和其他列_Awk - Fatal编程技术网

Awk 打印特定列和其他列

Awk 打印特定列和其他列,awk,Awk,这是我当前的输入: 12 01 2016 "TEST-12345" "Bug" 12 01 2016 "Here are some words with spaces" "No" "No" 目前我正在使用以下命令: cat DATEI | awk '{print $3"."$2"."$1,$4,$5,$8"."$7"."$6}' 但我不会在这里看到最后一栏,有些单词有空格No No。当然,我可以做9美元、10美元、11美元、12美元、13美元……100美元,但这不是一个好的解决方案

这是我当前的输入:

12 01 2016   "TEST-12345" "Bug"  12 01 2016   "Here are some words with spaces" "No" "No"
目前我正在使用以下命令:

cat DATEI | awk '{print $3"."$2"."$1,$4,$5,$8"."$7"."$6}'
但我不会在这里看到最后一栏,有些单词有空格No No。当然,我可以做9美元、10美元、11美元、12美元、13美元……100美元,但这不是一个好的解决方案

我的目标是获得以下输出:

2016.01.12 "TEST-12345" "Bug" 2016.1.12 "Here are some words with spaces" "No" "No"

你有什么想法吗?

如果你只想检查类似日期的字符串,而文本中没有其他不想转换的日期,你可以使用sed:

sed -E -e 's/([[:digit:]]{2}) ([[:digit:]]{2}) ([[:digit:]]{4})/\3.\2.\1/g' DATEI
对于GNU sed,使用-r而不是-E

awk -F '"' -v OFS='"' '{split($1, a, " ");$1=a[3]"."a[2]"."a[1]" ";$5=" "$1;print $0}'

作为IFS和OFS使用,并将第一个字段$1(使用分隔符作为空格)拆分为数组a。并使用数组a中的值重新分配具有重新定位值的$1。同样,5美元也可以。在这里,我假设$5与$1相同,否则请使用另一个拆分为$5。

向我们显示您的输入和用于获取当前输出的awk命令。对不起,我对脚本编写不太熟悉;-。。。这已经是可以粘贴的语法了吗?或者…?如果cat DATE | awk{whatever}对您有效,您应该可以不更改地粘贴我的sed代码。它不起作用:-使用awk'{print$3.$2.$1,$4,$5,$8.$7.$6}'我得到每一列,除了这里有一些带空格的单词没有。这里有一些带空格的单词列每次的长度都不相同。日期已经正确,但我只需要打印…$6之后的其余列。上面的sed脚本将所有12 01 2016日期更改为2016.01.12,并保持行的其余部分不变。也许在日期部分之间有制表符而不是空格?另外,请详细说明它不起作用的含义-是否存在错误或输出不正确?cat DATEI | sed-E-E s/[[:digit:]{2}[[:digit:]]{2}[:digit:]{4}/\3.\2.\1/g'DATEI我遇到一个错误:sed:invalid option-'E',如果我删除-E,将显示以下消息:sed:-E表达式1,char 63:'s'命令的RHS上的引用\3无效…或仅打印而不是打印$0。