Sed 移动最后一列标题名并将其放在所有行的第一列上
希望在该示例中标题中的最后一列是“db5b”,并在下一行的第一列中插入 输出:Sed 移动最后一列标题名并将其放在所有行的第一列上,sed,awk,grep,Sed,Awk,Grep,希望在该示例中标题中的最后一列是“db5b”,并在下一行的第一列中插入 输出: Filesystem utilization for db5b /dev/hd4 3.00 2.87 5% 5728 1% / /dev/hd2 7.00 2.79 61% 61845 9% /usr /dev/hd9var 7.00
Filesystem utilization for db5b
/dev/hd4 3.00 2.87 5% 5728 1% /
/dev/hd2 7.00 2.79 61% 61845 9% /usr
/dev/hd9var 7.00 5.88 17% 861 1% /var
/dev/hd3 3.00 2.98 1% 205 1% /tmp
预期结果:
db5b 5% /
db5b 61% /usr
db5b 17% /var
db5b 1% /tmp
我使用了它,但不知道如何将db5b放在第一列:
awk '{print $3, $7}'
我猜如果想用awk完成结果,可以使用NF,但不确定如何完成命令。例如:
$ awk 'NR==1 {a=$NF} NR>1 && $0 {print a,$4,$7}' file
db5b 5% /
db5b 61% /usr
db5b 17% /var
db5b 1% /tmp
解释
在第一行,将最后一个字段保存到varNR==1{a=$NF}
中a
在第一行之后的行上,使用一些数据,打印值加上第四和第七个字段NR>1&&$0{print a,$4,$7}
对于输入,如:
比如说:
$ awk 'NR==1 {a=$NF} NR>1 && $0 {print a,$4,$7}' file
db5b 5% /
db5b 61% /usr
db5b 17% /var
db5b 1% /tmp
解释
在第一行,将最后一个字段保存到varNR==1{a=$NF}
中a
在第一行之后的行上,使用一些数据,打印值加上第四和第七个字段NR>1&&$0{print a,$4,$7}
对于输入,如:
这一行给出了您想要的:
awk 'NR==1{t=$NF;next}$0{print t,$4,$NF}' file
编辑
对于不同的标题:
awk 'NF==4{t=$NF;next}$0{print t,$4,$NF}' file
这一行给出了您想要的:
awk 'NR==1{t=$NF;next}$0{print t,$4,$NF}' file
编辑
对于不同的标题:
awk 'NF==4{t=$NF;next}$0{print t,$4,$NF}' file
测试:
测试:
如果你想要一些非awk的东西:-
#!/usr/bin/env bash
set -x
while read -r
do
output=$(echo "${REPLY}" | tr -s ' ')
drive=$(echo "${output}" | cut -f7)
percent=$(echo "${output}" | cut -f4)
echo -e "db5b\t${percent}\t${drive}"
done < fs_utilisation
#/usr/bin/env bash
集合x
而read-r
做
输出=$(回显“${REPLY}”| tr-s')
驱动器=$(回显“${output}”|剪切-f7)
百分比=$(回显“${output}”|剪切-f4)
echo-e“db5b\t${percent}\t${drive}”
已完成
echo的-e开关可能只是bash,因此不可移植。如果是这样,我道歉;你得检查一下。我之所以使用-e开关,是因为它将\t解释为在字段之间提供制表符 如果你想要一些非awk的东西:-
#!/usr/bin/env bash
set -x
while read -r
do
output=$(echo "${REPLY}" | tr -s ' ')
drive=$(echo "${output}" | cut -f7)
percent=$(echo "${output}" | cut -f4)
echo -e "db5b\t${percent}\t${drive}"
done < fs_utilisation
#/usr/bin/env bash
集合x
而read-r
做
输出=$(回显“${REPLY}”| tr-s')
驱动器=$(回显“${output}”|剪切-f7)
百分比=$(回显“${output}”|剪切-f4)
echo-e“db5b\t${percent}\t${drive}”
已完成
echo的-e开关可能只是bash,因此不可移植。如果是这样,我道歉;你得检查一下。我之所以使用-e开关,是因为它将\t解释为在字段之间提供制表符 当我有多个不同标题名称的输出时,它只复制所有的第一个标题result@KalinBorisov请在我的编辑中测试一行当我有多个不同标题名称的输出时,它只复制所有的第一个标题result@KalinBorisov请在我的编辑中测试一行