I want to remove the first 6 columns containing blanks of this text file sample.txt
2022-05-26 Mary Jane
foo bar
2022-05-27 Tom Powels
lorem ipsum
bar foo
2022-05-28 Honky Tonk
2022-05-28 Hill Billy
...
by linux shell scripting, e.g. by using sed
, awk
and/or cut
.
Hence the expected output is
2022-05-26 Mary Jane
foo bar
2022-05-27 Tom Powels
lorem ipsum
bar foo
2022-05-28 Honky Tonk
2022-05-28 Hill Billy
...
I've searched in SE, but only found solutions to remove all blanks at the beginning of each line, e.g.
$ sed 's/^ *//' sample.txt > output.txt
which results in this file
2022-05-26 Mary Jane
foo bar
2022-05-27 Tom Powels
lorem ipsum
bar foo
2022-05-28 Honky Tonk
2022-05-28 Hill Billy
...
where the formatting of the columns is lost.
Unfortunately this call of sed
$ sed 's/^ {6}//' sample.txt > output.txt
doesn't work.
Hence how could I remove the first 6 columns containing blanks by linux shell scripting?
CodePudding user response:
Removing arbitrary columns from a text file could be done by colrm
on linux shell.
This command line tool from IBM is documented here.
Hence removing the first 6 columns from sample.txt
could be done by
$ colrm 1 6 < sample.txt > output.txt
resulting in the desired output
2022-05-26 Mary Jane
foo bar
2022-05-27 Tom Powels
lorem ipsum
bar foo
2022-05-28 Honky Tonk
2022-05-28 Hill Billy
...
CodePudding user response:
sed -E 's/^ {6}//' sample.txt > output.txt
awk '{gsub(/^ {6}/,""); print > "output.txt"}' sample.txt
CodePudding user response:
If you need to remove n first characters from each line, then GNU AWK
substr
function is handy, let file.txt
content be
2022-05-26 Mary Jane
foo bar
2022-05-27 Tom Powels
lorem ipsum
bar foo
2022-05-28 Honky Tonk
2022-05-28 Hill Billy
...
then
awk '{print substr($0,7)}' file.txt
output
2022-05-26 Mary Jane
foo bar
2022-05-27 Tom Powels
lorem ipsum
bar foo
2022-05-28 Honky Tonk
2022-05-28 Hill Billy
...
Explanation: print
part of current line ($0
) starting at 7
th character.
(tested in gawk 4.2.1)