awk 高级用法

leecode题目: https://leetcode.cn/problems/transpose-file/

答案是:

cols=$(cat file.txt | head -n 1 | awk '{print NF}')

for i in $(seq 1 $cols)
do
  cat file.txt | awk '{print $'''$i'''}' | tr '\n' ' ' |  sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
  echo "" 
done

思想很简单,先获取列数,然后一次获取此列的全部单词,打印成一行。

要点

按空格获取某行的列数

cat file.txt | head -n 1 | awk '{print NF}'

其中head -n 1 是指取第一行,NF代表此行的字段个数,默认是按空格分割。

打印某列

c11 c12 c13
c21 c22 c23
c31 c32 c33

如何打印第二列?

c12
c22
c32

使用占位符$2

 cat file.txt | awk '{print $2}' 

那如何使得$2中的2变成变量?

cat file.txt | awk '{print $'''$i'''}' 

替换换行符

如何将

c12
c22
c32

转换为:

c12 c22 c32

只需要将换行符替换掉就行了

cat file.txt | awk '{print $'''$i'''}' | tr '\n' ' '

移除前后空格

sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值