Bash 命令从多个文件获取数据并附加文件名

Bash 命令从多个文件获取数据并附加文件名

我在一个文件夹(例如/tmp)中有以下文件

1.id
2.id
3.id
4.id

很快...

在这些文件中,里面有一个数字。例如,其中1.id可以是 the 1000,其中2.id可以是 the2000等。

我想要一个一行 bash 命令来自动获取所有这些文件的值(数字)(*.id),但还附加它的文件名。

所以输出应该是:

1.id=1000
2.id=2000

答案1

grep只需在此文件夹中使用:

grep "" *.id

输出:

1.id:123
2.id:13
3.id:5
4.id:87876

顺便提一句:我经常在 proc 或 sysfs 文件系统中使用它;

cd /sys/class/net/eth0
grep "" *

这为您提供了 sysfs 中有关以太网接口的所有信息eth0

答案2

使用awk

awk '{printf "%s=%s\n",FILENAME,$0}' *.id

或者

awk 'OFS="=" {print FILENAME,$0}' *.id

例子

% awk '{printf "%s=%s\n",FILENAME,$0}' *.id
1.id=1000
2.id=2000

% awk 'OFS="=" {print FILENAME,$0}' *.id
1.id=1000
2.id=2000

% awk '{printf "%s:%s\n",FILENAME,$0}' *.id
1.id:1000
2.id:2000

等等

答案3

这是bash单行:

for i in *.id; do echo ""$i"=$(<"$i")"; done

例子 :

$ ls -1
1.id
2.id


$ for i in *.id; do echo ""$i"=$(<"$i")"; done
1.id=10000
2.id=2000

相关内容