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:]]*$//'