Sed 移动最后一列标题名并将其放在所有行的第一列上

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

希望在该示例中标题中的最后一列是“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      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
解释
  • NR==1{a=$NF}
    在第一行,将最后一个字段保存到var
    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
解释
  • NR==1{a=$NF}
    在第一行,将最后一个字段保存到var
    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请在我的编辑中测试一行