Comando Bash Obter dados de vários arquivos e acrescentar o nome do arquivo

1

Eu tenho em uma pasta (por exemplo, /tmp ) os seguintes arquivos

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

assim por diante ...

Nesses arquivos, há um número dentro dele. Por exemplo, em 1.id pode ser o 1000 , em 2.id pode ser o 2000 etc.

Eu quero um comando bash de uma linha para obter o valor (número) de todos esses arquivos automaticamente ( *.id ), mas acrescente também o nome do arquivo dele.

Portanto, a saída deve ser:

1.id=1000
2.id=2000
    
por OhGodWhy 12.08.2015 / 17:27

3 respostas

3

Use apenas grep nesta pasta:

grep "" *.id

Saída:

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

BTW: costumo usar isso nos sistemas de arquivos proc ou sysfs;

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

Isso lhe dá todas as infos em sysfs sobre a interface ethernet eth0 .

    
por 12.08.2015 / 18:12
1

Usando awk

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

ou

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

Exemplos

% 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

e assim por diante

    
por 12.08.2015 / 22:25
0

Aqui está um marcador bash one:

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

Exemplo:

$ ls -1
1.id
2.id


$ for i in *.id; do echo ""$i"=$(<"$i")"; done
1.id=10000
2.id=2000
    
por 12.08.2015 / 17:33