Tag: awk

按行长度(包括空格)sorting文本文件

我有一个看起来像这样的CSV文件 AS2345,ASDF1232,Plain案例,110 Binary Ave.,Atlantis,RI,12345,(999)123-5555,1.56 AS2345,ASDF1232,夫人平原例子,1121110三元st。 110 Binary ave ..,Atlantis,RI,12345,(999)123-5555,1.56 AS2345,ASDF1232,Plain案例,110 Binary Ave.,Liberty City,RI,12345,(999)123-5555,1.56 AS2345,ASDF1232,平原例,110三重大学,一些城市,RI,12345,(999)123-5555,1.56 我需要按照包括空格在内的行长来sorting。 下面的命令不包含空格,有没有办法修改它,所以它会为我工作? cat $@ | awk '{ print length, $0 }' | sort -n | awk '{$1=""; print $0}'

如何从命令输出获得第二列?

我的命令的输出是这样的: 1540 "AB" 6 "C" 119 "D" 第一列总是一个数字,后跟一个空格,然后是一个双引号的string。 我的目的是只得到第二列,如: "AB" "C" "D" 我打算使用<some_command> | awk '{print $2}' <some_command> | awk '{print $2}'来完成这个任务。 但问题是,第二列中的某些值包含空格,这恰好是awk分隔字段的默认分隔符。 因此,输出是混乱的: "A "C" "D" 我怎么得到第二列的价值(与配对报价)干净?

如何在awk中将分隔string拆分为数组?

如何在包含pipe道符号的情况下拆分string 在里面。 我想分裂他们在arrays中。 我试过了 echo "12:23:11" | awk '{split($0,a,":"); print a[3] a[2] a[1]}' 哪个工作正常。 如果我的string像"12|23|11"那么我如何将它们拆分成一个数组?

如何使用sed,awk或gawk打印只匹配的内容?

我看到很多关于如何使用sed,awk或gawk进行search和replace的示例和手册页。 但就我而言,我有一个正则expression式,我想运行一个文本文件来提取一个特定的值。 我不想做search和replace。 这是从bash调用。 我们用一个例子: 示例正则expression式: .*abc([0-9]+)xyz.* input文件示例: a b c abc12345xyz a b c 这听起来很简单,我不知道如何正确调用sed / awk / gawk。 我希望做的是从我的bash脚本里面得到: myvalue=$( sed <…something…> input.txt ) 我尝试过的东西包括: sed -e 's/.*([0-9]).*/\\1/g' example.txt # extracts the entire input file sed -n 's/.*([0-9]).*/\\1/g' example.txt # extracts nothing

还有什么理由要学习AWK吗?

我不断学习新的工具,甚至老式的工具,因为我喜欢用正确的解决scheme解决问题。 不过,我想知道是否还有理由去学习其中的一些。 例如awk对我来说很有趣,但是对于简单的文本处理,我可以使用grep , cut , sed等,而对于复杂的,我会去Python。 现在我不是说这不是一个强大而方便的工具。 但是,由于学习新工具需要时间和精力, 是否值得呢 ?

如何使用awb与shebang(即#!)的多个参数?

我想执行一个gawk脚本–re-interval使用shebang。 “天真”的做法 #!/usr/bin/gawk –re-interval -f … awk script goes here 不起作用,因为gawk被第一个参数"–re-interval -f" (不是分割在空白周围)调用,它不理解。 有没有解决方法? 当然,你可以不直接调用gawk,而是将其封装到一个shell脚本中,以分裂第一个参数,或者创build一个shell脚本,然后调用gawk并将脚本放到另一个文件中,但是我想知道是否有一些方法可以做这在一个文件中。 shebang行的行为在系统之间是不同的 – 至less在Cygwin中它不会用空格分隔参数。 我只是在乎如何在一个像这样的系统上做到这一点; 该脚本并不意味着可移植。

如何使用awk打印最后两列

我想要的是最后两列打印。

AWK多分隔符

我有一个文件,其中包含以下行: /logs/tc0001/tomcat/tomcat7.1/conf/catalina.properties:app.env.server.name = demo.example.com /logs/tc0001/tomcat/tomcat7.2/conf/catalina.properties:app.env.server.name = quest.example.com /logs/tc0001/tomcat/tomcat7.5/conf/catalina.properties:app.env.server.name = www.example.com 在上面的输出中,我想提取3个字段(数字2,4和最后一个*.example.com )。 我得到以下输出: cat file | awk -F'/' '{print $3 "\t" $5}' tc0001 tomcat7.1 tc0001 tomcat7.2 tc0001 tomcat7.5 我怎样才能提取最后一个领域的'='后面'='域名? 如何使用multiple delimiter来提取字段?

awk没有打印换行符

我希望可变和/ NR在每次迭代中并排打印。 我们如何避免awk在每次迭代中打印换行符? 在我的代码中,默认情况下在每次迭代中都会打印一个换行符 for file in cg_c ep_c is_c tau xhpl printf "\n $file" >> to-plot.xls for f in 2.54 1.60 800 awk '{sum+=$3}; END {print sum/NR}' ${file}_${f}_v1.xls >> to-plot-p.xls done done 我希望输出像这样出现 cg_c ans1 ans2 ans3 ep_c ans1 ans2 ans3 is_c ans1 ans2 ans3 tau ans1 ans2 ans3 xhpl ans1 ans2 ans3 我目前的输出是这样的 […]

在awk中打​​印倒数第二列/字段

我想在awk中打​​印倒数第二列或者字段。 字段的数量是可变的。 我知道我应该可以使用$NF但不知道如何使用它。 而这似乎并没有工作: awk ' { print ( $NF– ) } '