我应该使用cut或awk来提取字段和字段子串吗?

use*_*154 11 awk field cut sed text-parsing

我有一个管道分隔字段的文件.我想打印字段1的子集和字段2的全部:

cat tmpfile.txt

# 10 chars.|variable length num|text
ABCDEFGHIJ|99|U|HOMEWORK
JIDVESDFXW|8|C|CHORES
DDFEXFEWEW|73|B|AFTER-HOURS
Run Code Online (Sandbox Code Playgroud)

我希望输出看起来像这样:

# 6 chars.|variable length num
ABCDEF|99
JIDVES|8
DDFEXF|73
Run Code Online (Sandbox Code Playgroud)

我知道如何获得字段1和2:

cat tmpfile.txt | awk '{FS="|"} {print $1"|"$2}'
Run Code Online (Sandbox Code Playgroud)

并知道如何获得字段1的前6个字符:

cat tmpfile.txt | cut -c 1-6
Run Code Online (Sandbox Code Playgroud)

我知道这很简单,但我无法弄清楚如何组合awk和cut命令.

任何建议将不胜感激.

dev*_*ull 14

你可以用awk.使用该substr()函数修剪第一个字段:

awk -F'|' '{print substr($1,1,6),$2}' OFS='|' inputfile
Run Code Online (Sandbox Code Playgroud)

为了您的输入,它产生:

ABCDEF|99
JIDVES|8
DDFEXF|73
Run Code Online (Sandbox Code Playgroud)

使用sed,你可以说:

sed -r 's/^(.{6})[^|]*([|][^|]*).*/\1\2/' inputfile
Run Code Online (Sandbox Code Playgroud)

产生相同的输出.

  • @jaypal诚挚邀请您访问http://codegolf.stackexchange.com/ (6认同)
  • @Jotne为什么甚至打扰括号和`1`.`awk -F\| '$ 0 = substr($ 1,1,6)FS $ 2'应该足够了.`)` (2认同)