2 votes

créer des fichiers vides à l'aide de la commande touch à partir des mots contenus dans un fichier test.txt

J'essaie d'écrire une commande en une ligne pour créer 20 fichiers vides avec des noms extraits d'un fichier .txt dans un autre répertoire de dossiers avec la même extension txt.

J'ai essayé

for i in $(cat test.txt); do grep -w $i | touch $i.txt ; done

et

cat test.txt| while read line ; do grep $line ; touch $line.txt ; done

ainsi que

for filename in $(cat testfile.txt) ;  do touch head -20 $filename.txt; done

Cela ne fonctionne pas. Je ne sais pas comment spécifier les 10 premiers mots du fichier test.txt.

2voto

Cela vous convient-il ?

while IFS= read -r i; do
  touch "$i".txt
done < <(head -20 filename.txt)

2voto

bac0n Points 4841

Obtenir les 20 premiers mots.

Utilisation couper :

$ for i in $(cut -d ' ' -f1-20 a.txt); do touch $i.txt; done

(avec fichier de cartes ):

$ mapfile -d ' ' -n 20 -t < a.txt; touch ${MAPFILE[@]/%/.txt}

(avec awk ):

$ awk '{for (i=1; i<=20; i++) {system("touch "$i".txt")}}' a.txt

(avec Shell. ):

$ a=($(<a.txt)); a=(${a[@]/%/.txt}); touch ${a[@]:0:19}

1voto

Sergiy Kolodyazhnyy Points 97292

xargs La commande a --arg-file qui permet d'utiliser des arguments pour une commande que vous avez l'intention d'exécuter à partir d'un fichier. Ainsi, vous pouvez faire

xargs --arg-file=filenames.txt touch

Si vous voulez les 20 premières lignes

head -n20 filenames.txt | xargs  touch

Remplaçant(e) tail au lieu de head pour les 20 dernières lignes du fichier

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X