我想寫一個代碼,從文件A中提取數據,並將指定的開始和結束點的列數據粘貼到文件B.到目前爲止,我只能成功將所有數據從A複製到B - 但是無法在任何地方過濾出列。我試圖尋找拼接和grep無濟於事。在Perl中沒有經驗。數據沒有列標題。 樣品:該數據實際上是上千行長 - 不能將數據插入功能Perl函數提取數據與指定的起始列和長度
1. AAA 565 u8y 221
2. ABC 454 9u8 352
3. ADH 115 i98 544
4. AKS 352 87y 454
5. GJS 154 i9k 141
我想要的第三列的所有唯一值(開始:8長度:3)被複制到文件B 。我試過How to extract a particular column of data in Perl?提供的解決方案無濟於事。
感謝您的任何提示或幫助!
#!/usr/bin/perl
use strict;
use warnings;
#use Cwd qw(abs_path);
#my $dir = '/home/
#$dir = abd_path($dir);
my $filename = "filea.txt";
my $newfilename = "fileb.txt";
#Open file to read raw data
open (DATA1, "<$filename") or die "Couldn't open $filename: $!";
#Open new file to copy desired columns
open (DATA2, ">$newfilename") or die "Couldn't open $newfilename: $!";
#Copy data from original to new file
while (<DATA1>) {
#DATA2=splice(DATA1, 0,5);
print DATA2 $_;
my @fifth_column = map{(split)[1]} split /\n/, $newfilename;
}
單線作品很棒!非常感謝你通知我這個選擇!它確實吐出了下面的警告 - 即使它給了我正確的輸出。 @TLP名稱「main :: seen」僅用於一次:在-e行1處可能出現錯字。 – todayspresent 2013-02-26 19:30:17
想要添加 - 我不是非常擔心警告......只是一個FYI @TLP – todayspresent 2013-02-26 19:36:20
@todayspresent該警告不相關。這只是因爲我們實際上一次只做兩件事,'除非$ seen {$ x} ++'真的很短',除非$ seen {$ x}; $看出{$ X} ++;'。再加上單行不使用嚴格的事實,所以我們不聲明變量。如果您覺得您的問題已得到解答,您可以點擊旁邊的複選標記接受答案。 – TLP 2013-02-26 19:48:34