如何在以下行中仅提取/ app / xxxx字段,并将df -P -T命令添加到提取的字符串中,并以下列格式保存输出
edlp_nps_app:x:23449:5000:EDLP_NPS_APP (HP):/app/edlp_nps_app:/bin/bash
genxp_app:x:23414:15887:GENXP_APP (HP):/app/genxp_app:/bin/bash
icegnapp:x:21697:15954:ICEGNAPP (HP):/app/icegnapp:/bin/bash
icegnftp:x:21554:15416:ICEGNFTP
(HP):/app/icegnftp:/usr/libexec/openssh/sftp-server
df -P -T /app/XXXXX
df -P -T /app/edlp_nps_app
O/P:
Filesystem Type 1024-blocks Used Available Capacity
Mounted on
/dev/mapper/rootvg-rootvol ext4 144365708 27057836 110769428 20% /
我需要的输出是FS,类型,已安装,appname
/ dev / mapper / rootvg-rootvol \ textt / / app / edlp_nps_app
我尝试了awk命令,但它没有工作
答案 0 :(得分:0)
如果第6个字段以awk
开头,则使用/app
测试,如果为true,则打印第6个字段
awk -F':' '$6~/^\/app/{print "df -P -T "$6}' infile | bash
保存在档案
awk -F':' '$6~/^\/app/{print "df -P -T "$6}' infile | bash > outfile
为避免多次打印标题,您可以管道另一个awk
,如下所示
awk -F':' '$6~/^\/app/{print "df -P -T "$6}' infile | bash | awk 'FNR==1{print;next}/Filesystem/{next}1' >outfile
测试结果:
输入:
$ cat file
edlp_nps_app:x:23449:5000:EDLP_NPS_APP (HP):/app/edlp_nps_app:/bin/bash
genxp_app:x:23414:15887:GENXP_APP (HP):/app/genxp_app:/bin/bash
icegnapp:x:21697:15954:ICEGNAPP (HP):/app/icegnapp:/bin/bash
icegnftp:x:21554:15416:ICEGNFTP
(HP):/app/icegnftp:/usr/libexec/openssh/sftp-server
输出:
$ awk -F: '$6~/^\/app/{print "df -P -T "$6}' file
df -P -T /app/edlp_nps_app
df -P -T /app/genxp_app
df -P -T /app/icegnapp
答案 1 :(得分:0)
extract / app / xxx
首先我们删除不包含/ app
的行sed '/\/app/!d'
然后我们提取/ app /...
's|.*\(/app/[^:]*\).*|\1|'
组合:
sed '/\/app/!d;s|.*\(/app/[^:]*\).*|\1|'
我需要的输出是FS,类型,已安装,appname
/ dev / mapper / rootvg-rootvol \ textt / / app / edlp_nps_app
让我们通过仅提供相关字段来调整df的输出
df /app/foo --output=source,fstype,target
我不相信我们可以让df放弃标题,所以我们将其删除
df /app/foo --output=source,fstype,target | sed '1d'
我将手动附加应用名称并将其全部放在名为" magic.sh"的脚本中:
#!/bin/sh
if [ ! -f "$1" ]
then
echo "Input file does not exist!"
exit 1
fi
if [ -f "$2" ]
then
echo "Output file already exists!"
exit 2
fi
sed '/\/app/!d;s|.*\(/app/[^:]*\).*|\1|' $1 | while read -r app
do
echo "$(df $app --output=source,fstype,target | sed '1d') $app" >> $2
done
假设指定的输入位于名为&#34的文件中;输入"并且你希望结果在名为"输出"的文件中,这是如何调用它:
sh magic.sh input output