简体   繁体   中英

Linux: Append Word Count to Each Line of a File

Quite new to Linux at the moment,

I've seen some straightforward answers for appending a constant/non-changing word/component to the end of a file eg shell script add suffix each line

However, I'd like to know how to append the word count for each line of a .csv file to the end of each line, so that:

word1, word2, word3
foo1, foo2
bar1, bar2, bar3, bar4

Becomes:

word1, word2, word3, 3
foo1, foo2, 2
bar1, bar2, bar3, bar4, 4

I am working with comma separated values, so if there is a quicker/simpler way to do it by making use of the commas rather than the items, then that would work as well.

Cheers!

Simple awk solution:

awk -F ',' '{print $0", "NF}' file.csv
  • -F argument can be used to specify the field separator, , in your case.
  • $0 will contain the entire line
  • NF is the variable that contains the number of fields in the line

you can use this:

while read line; do

N=`echo $line | wc -w`;
echo $line", "$N;

done < inputfile.txt

a simple (yet most likely slow) bash script could do the trick:

#!/bin/bash

newfile=$1.tmp

cat $1 | while read l ; do

  echo -n $l \ >> $newfile
  echo $l | wc -w  >> $newfile

done

then move files according to your liking (be save by using tempfile ...) for file:

one,
one, two,
one, two, three,

I get:

one,  1
one, two,  2
one, two, three,  3

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM