#perl #copy
#perl #Копировать
Вопрос:
Я только что изучил программирование на Perl, и мне нужна помощь. Я хочу скопировать 1 столбец из файла A в новый файл. В файле A есть 3 столбца, и я хочу скопировать только файл первого столбца в новый файл, кто-нибудь может мне помочь?
file_a.txt
JJ | John Junior | 300-400
SJ | Samuel Jackson | 500-600
CJ | Chris John | 789-899
BB | Bernard Blaze | 789-899
LV | Luis Villa | 789-899
Я хочу скопировать раздел первого столбца в новый файл:
newfile.txt
JJ
SJ
CJ
BB
LV
Я нашел в Интернете, что мне нужно использовать разделитель tab (t) для разделения столбцов и использовать разделитель новой строки (n) для разделения строк.(но я не понимаю)
Извините, я новичок, может быть, кто-то хочет мне помочь. Спасибо
Комментарии:
1. Perl даже не нужен.
cut -d '|' -f1 file_a.txt > newfile.txt
из оболочки.2. … или
cut -d' ' -f1
не включать пробел.3. Хорошо, я в замешательстве. Кажется, что включенный вами пример файла использует
|
(отсюда и мой первый комментарий) или, может<space>|<space>
быть, в качестве разделителя столбцов, но затем вы упоминаете вкладки? Что вы используете?4. Я научился создавать программу, спасибо, что помогли мне
Ответ №1:
Существует много способов отфильтровать первый столбец:
cut -d ' ' -f1 in_file > out_file
(UNIX / Linux / Mac OSX)nawk '{ print $1 }' in_file > out_file
(UNIX / Linux / Mac OSX)
Если вас интересует сценарий perl
use strict;
use warnings;
use feature 'say';
my $in = shift;
my $out = shift;
open my $fh_in, '<', $in
or die "Couldn't open $in";
open my $fh_out, '>', $out
or die "Couldn't open $out";
while( <$fh_in> ) {
chomp;
say $fh_out (split)[0];
}
close $fh_in;
close $fh_out;
Короткая версия выполняется как script.pl in_file > out_file
use strict;
use warnings;
use feature 'say';
say ((split)[0]) while <>;
Или даже короче с помощью perl one liner
perl -ane "print qq($F[0]n)" in_file > out_file
Комментарии:
1.
perl -anE 'say $F[0]' in_file > out_file
если мы играем в гольф.2. Большое вам спасибо, это действительно помогло мне!
3. @Shawn или
perl -pe 's/ .*//' in_file > out_file
если мы действительно играем в гольф 😉