如何在ksh中获取子字符串

时间:2014-05-29 09:39:02

标签: unix awk substring ksh cut

我有一个名为" output.txt"的文件。拥有格式的数据:

400949703|2000025967912|20130614010652|20130614131543
355949737|2144050263|20120407100407|20120407101307
355499738|2144500262|20110911010901|20110911135601

我正在执行一个awk命令,如下所示:

awk -F"|" '{num1="`echo $3| cut -c1-8`"; print $num1}' output.txt

我的预期输出是:

20130614
20120407
20110911

但我得到的输出实际上是输入。

400949703|2000025967912|20130614010652|20130614131543
355949737|2144050263|20120407100407|20120407101307
355499738|2144500262|20110911010901|20110911135601

无法找出原因。我的任务是比较第3和第4列中的前8个字符。但只是坚持这一部分。

专家们,请帮助我顺道,我失踪的地方。

2 个答案:

答案 0 :(得分:1)

你正在将bash与awk混合,一个工具就足够了:

awk -F\| 'a=substr($3, 1, 8){if(a==substr($4, 1, 8)){print a}}' output.txt

获取第3列和第4列的子字符串,比较它并打印它是否正常。

答案 1 :(得分:1)

两次使用cut怎么办?

$ cut -d'|' -f4 file | cut -c-8
20130614
20120407
20110911
  • 首先根据|分隔符获取第4个字段。
  • 其次是获取前8个字符(请注意cut -c-8与您的cut -c1-8相同)